A data processing system may include hardware resources, such as one or more processors, random access memory (RAM), read-only memory (ROM), etc. A processor may include multiple processing units. The processing system may also include software resources, such as a basic input/output system (BIOS), an operating system (OS), and various applications.
A processor may provide hardware support for processing vectors. A vector is a data structure that holds a number of consecutive elements or data items. A vector register of size M may contain N vector elements of size O, where N=M/O. For instance, a 64-byte vector register may be partitioned into (a) 64 vector elements, with each element holding a data item that occupies 1 byte, (b) 32 vector elements to hold data items that occupy 2 bytes (or one “word”) each, (c) 16 vector elements to hold data items that occupy 4 bytes (or one “doubleword”) each, or (d) 8 vector elements to hold data items that occupy 8 bytes (or one “quadword”) each.
A processor may support SIMD operations, to provide data level parallelism. SIMD operations typically involve application of the same operation to multiple data items. For instance, in response to a single SIMD add instruction, a processor may add a specified value to each element in a vector.
As advances are made in processor design and manufacture, more powerful and more complex SIMD instructions become available. It therefore gets harder and harder for programmers to fully understand all of the latest SIMD instructions. It can therefore be difficult for programmers to debug code that uses complex sequences of SIMD instructions.
For instance, a more or less conventional disassembler function may be used to extract SIMD instructions from machine code that is being executed by a processor, but a typical disassembler function only provides a textual view of the instruction stream. By contrast, a training manual may include illustrations of various SIMD instructions, and each illustration may show how one SIMD instruction uses source operands and target operands. However, such illustrations do not show how different SIMD instructions within a particular program relate to each other.